<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/3/9
 * Time: 10:29
 */

namespace Home\Controller;

use Think\Controller;

class CategoryController extends Controller{



    public function index(){
        header('Content-type:text/html;charset=utf-8');
        $cate = array(
            0   => array('id'=> 1,'pid'=>0,'name'=>'第一'),
            1   => array('id'=> 2,'pid'=>1,'name'=>'第一的子类1'),
            2   => array('id'=> 3,'pid'=>0,'name'=>'第二'),
            3   => array('id'=> 4,'pid'=>1,'name'=>'第一的子类2'),
            4   => array('id'=> 5,'pid'=>0,'name'=>'第三'),
            5   => array('id'=> 6,'pid'=>3,'name'=>'第二的子类1'),
        );

        $tree_cate = $this->list_to_tree($cate);
        dump($tree_cate);

    }


    /**
     * @param  array $list  :要排序的数据
     * @param string $pk    ：分类主键
     * @param string $pid   ：父id键名
     * @param string $child ：子类 定义键名
     * @param int $root     ：根分类id
     * @return array
     *
     * 内存地址经典 应用 ，不得不给想到 这种实现排序方案的人 点个赞。zsd
     */
    public function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0) {
        // 创建Tree
        $tree = array();
        if(is_array($list)) {
            // 创建基于主键的数组引用
            $refer = array();
            foreach ($list as $key => $data) {
                $refer[$data[$pk]] =& $list[$key];
            }

            foreach ($list as $key => $data) {
                // 判断是否存在parent
                $parentId =  $data[$pid];
                if ($root == $parentId) {
                    $tree[] =& $list[$key];
                }else{
                    if (isset($refer[$parentId])) {
                        $parent =& $refer[$parentId];
                        $parent[$child][] =& $list[$key];
                    }
                }
            }
        }

        return $tree;
    }

}